package com.yuanian.ecsplus.reflect;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;

/**
 * 普通类的元字节
 * @param <T>
 */
public interface MetaClass<T> {

    /**
     * 创建实体
     * @return
     */
    T newInstance();


    /**
     * 获取类字节
     * @return
     */
    Class<T> getClazz();

    /**
     * 获取所有字段
     * @return
     */
    List<Field> getAllFields();

    /**
     * 根据字段名获取字段的类型
     * @param fieldName
     * @return
     */
    Class<?> getFieldType(String fieldName);

    /**
     * 实体类转MAP
     * @param obj
     * @return
     */
    Map toMap(Object obj);

    /**
     * data转实体类
     * @param data
     * @return
     */
    Object toEntity(Map<String, String> data);

    /**
     * 从map复制属性给obj
     * @param obj
     * @param data
     */
    void copyProperty(Object obj, Map data);

    /**
     * 需要持久化的字段
     * @return
     */
    List<EcsField> getObject2MapFields();

    /**
     * 需要展示的字段
     * @return
     */
    List<EcsField> getMap2ObjectFields();

}
